package in.lib.handler.base;
import in.lib.Debug;
import in.lib.exception.ExceptionHandler;
import in.lib.thread.FragmentRunnable;
import in.lib.thread.StreamFragmentRunnable;
import in.model.base.NetObject;
import in.obj.StreamMarker;
import in.rob.client.R;
import in.rob.client.page.base.StreamFragment;
import java.util.List;
import lombok.Getter;
import lombok.Setter;
import android.content.Context;
import android.text.TextUtils;
import android.widget.Toast;
public abstract class StreamResponseHandler<T extends StreamFragment> extends RobinResponseHandler<T>
{
@Getter @Setter private List<NetObject> objects;
@Getter @Setter private StreamMarker marker;
@Getter @Setter private Boolean append = false;
@Getter @Setter private Boolean hasMore = false;
@Getter @Setter private Boolean didFail = false;
@Getter @Setter private String lastId = "";
@Getter @Setter private String firstId = "";
@Getter @Setter private String failMessage = "";
public StreamResponseHandler(Context c, boolean append)
{
super(c);
this.append = append;
setFailMessage(c.getString(R.string.stream_fail));
}
@Override public void onSend()
{
super.onSend();
if (getFragment() != null)
{
getFragment().setLoading(true);
}
}
@Override public void onFinish(boolean failed)
{
if (failed || didFail)
{
Debug.out(getConnectionInfo());
if (getFragment() != null)
{
getFragment().runWhenReady(new FragmentRunnable<StreamFragment>()
{
@Override public void run()
{
getFragment().getRefreshHelper().finish();
getFragment().setLoading(false);
Toast.makeText(getFragment().getContext(), getFailMessage(), Toast.LENGTH_SHORT).show();
}
});
}
}
}
/**
* Implement this callback and use {@link #getChannels()} to get the returned List of posts
* For fragments, use onCallback to execute {@link RobinFragment.runWhenReady()} and pass <b>this</b>
* Then override {@link #run()} to finish the adapter stuff.
*
* See also: {@link #getHasMore()}, {@link #getLastId()}
*/
public abstract void onCallback();
protected StreamFragmentRunnable responseRunner = new StreamFragmentRunnable()
{
@Override public void run()
{
try
{
getFragment().getRefreshHelper().finish();
getFragment().getHeadedListView().setBlockLayoutChildren(true);
if (!TextUtils.isEmpty(getLastId()))
{
getFragment().getAdapter().setLastId(getLastId());
}
if (getAppend())
{
getFragment().getAdapter().addItems(getObjects());
}
else
{
getFragment().getAdapter().setFirstId(getFirstId());
getFragment().getAdapter().setItems(getObjects());
}
getFragment().getAdapter().setHasMore(getHasMore());
getFragment().getAdapter().setStreamMarker(getMarker());
setFinishedLoading(getAppend());
}
catch (Exception e)
{
ExceptionHandler.sendException(e);
}
super.run();
}
};
}